home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / monitor / eval.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.3 KB  |  69 lines

  1. # include    "monitor.h"
  2. # include    <ingres.h>
  3. # include    <aux.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)eval.c    8.1    12/31/84)
  7.  
  8.  
  9.  
  10. /*
  11. **  DO MACRO EVALUATION OF QUERY BUFFER
  12. **
  13. **    The logical query buffer is read and passed through the macro
  14. **    processor.  The main purpose of this is to evaluate {define}'s.
  15. **    If the 'pr' flag is set, the result is printed on the terminal,
  16. **    and so becomes a post-evaluation version of print.
  17. **
  18. **    Uses trace flag 12
  19. */
  20.  
  21. eval(pr)
  22. int    pr;
  23. {
  24.     register FILE    *tfile;
  25.     register char    c;
  26.     extern int    fgetc();
  27.     char        tfilename[40];
  28.  
  29.     Autoclear = 0;
  30.     clrline(1);
  31.  
  32.     /* open temp file and reopen query buffer for reading */
  33.     if (!pr)
  34.     {
  35.         concat("/tmp/INGTQ", Fileset, tfilename);
  36.         if ((tfile = fopen(tfilename, "w")) == NULL)
  37.             syserr("eval: open(%s)", tfilename);
  38.     }
  39.     if (freopen(Qbname, "r", Qryiop) == NULL)
  40.         syserr("eval: freopen 1");
  41.  
  42.     /* COPY FILE */
  43.     macinit(fgetc, Qryiop, 1);
  44.     while ((c = macgetch()) > 0)
  45.     {
  46.         if (pr)
  47.             putchar(c);
  48.         else
  49.             if (putc(c, tfile) == EOF)
  50.                 syserr("eval: putc");
  51.     }
  52.  
  53.     if (!pr)
  54.     {
  55.         /* link temp file back to query buffer */
  56.         fclose(tfile);
  57.         unlink(Qbname);
  58.         if (link(tfilename, Qbname))
  59.             syserr("eval: link");
  60.         unlink(tfilename);
  61.     }
  62.  
  63.     /* reopen query buffer (now evaluated) */
  64.     if (freopen(Qbname, "a", Qryiop) == NULL)
  65.         syserr("eval: freopen 2");
  66.  
  67.     cgprompt();
  68. }
  69.